{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6ef3ae22-93fe-4015-a199-529694d9c2a3",
   "metadata": {},
   "source": [
    "# Plotting Time Series\n",
    "\n",
    "Lets-Plot handles all temporal data types through a unified \"datetime\" scale (excluding duration, which is handled by the \"time\" scale). <br>\n",
    "This is in contrast to R's ggplot2, which provides separate \"date\", \"time\", and \"datetime\" scales.\n",
    "\n",
    "**Supported temporal data types:**\n",
    "\n",
    "**kotlinx.datetime** library:\n",
    "\n",
    "- `Instant`\n",
    "- `LocalDate`\n",
    "- `LocalTime`\n",
    "- `LocalDateTime`\n",
    "\n",
    "**java.time** package:\n",
    "\n",
    "- `Instant`\n",
    "- `LocalDate`\n",
    "- `LocalTime`\n",
    "- `LocalDateTime`\n",
    "- `ZonedDateTime` (timezone-aware)\n",
    "- `OffsetDateTime` (timezone-aware with offset)\n",
    "\n",
    "**java.util** package:\n",
    "\n",
    "- `Date`\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e25ce90c-408b-4b3e-8872-10d0249be8f5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"LdadS8\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"library\">\n",
       "       if(!window.letsPlotCallQueue) {\n",
       "           window.letsPlotCallQueue = [];\n",
       "       }; \n",
       "       window.letsPlotCall = function(f) {\n",
       "           window.letsPlotCallQueue.push(f);\n",
       "       };\n",
       "       (function() {\n",
       "           var script = document.createElement(\"script\");\n",
       "           script.type = \"text/javascript\";\n",
       "           script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.7.0/js-package/distr/lets-plot.min.js\";\n",
       "           script.onload = function() {\n",
       "               window.letsPlotCall = function(f) {f();};\n",
       "               window.letsPlotCallQueue.forEach(function(f) {f();});\n",
       "               window.letsPlotCallQueue = [];\n",
       "               \n",
       "               \n",
       "           };\n",
       "           script.onerror = function(event) {\n",
       "               window.letsPlotCall = function(f) {};\n",
       "               window.letsPlotCallQueue = [];\n",
       "               var div = document.createElement(\"div\");\n",
       "               div.style.color = 'darkred';\n",
       "               div.textContent = 'Error loading Lets-Plot JS';\n",
       "               document.getElementById(\"LdadS8\").appendChild(div);\n",
       "           };\n",
       "           var e = document.getElementById(\"LdadS8\");\n",
       "           e.appendChild(script);\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "            <div id=\"kotlin_out_0\"></div>\n",
       "            <script type=\"text/javascript\">\n",
       "                            if(!window.kotlinQueues) {\n",
       "                window.kotlinQueues = {};\n",
       "            }\n",
       "            if(!window.kotlinQueues[\"letsPlotJs\"]) {\n",
       "                var resQueue = [];\n",
       "                window.kotlinQueues[\"letsPlotJs\"] = resQueue;\n",
       "                window[\"call_letsPlotJs\"] = function(f) {\n",
       "                    resQueue.push(f);\n",
       "                }\n",
       "            }\n",
       "            (function (){\n",
       "                var modifiers = [(function(script) {\n",
       "    script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.7.0/js-package/distr/lets-plot.min.js\"\n",
       "    script.type = \"text/javascript\";\n",
       "})];\n",
       "                var e = document.getElementById(\"kotlin_out_0\");\n",
       "                modifiers.forEach(function (gen) {\n",
       "                    var script = document.createElement(\"script\");\n",
       "                    gen(script)\n",
       "                    script.addEventListener(\"load\", function() {\n",
       "                        window[\"call_letsPlotJs\"] = function(f) {f();};\n",
       "                        window.kotlinQueues[\"letsPlotJs\"].forEach(function(f) {f();});\n",
       "                        window.kotlinQueues[\"letsPlotJs\"] = [];\n",
       "                    }, false);\n",
       "                    script.addEventListener(\"error\", function() {\n",
       "                        window[\"call_letsPlotJs\"] = function(f) {};\n",
       "                        window.kotlinQueues[\"letsPlotJs\"] = [];\n",
       "                        var div = document.createElement(\"div\");\n",
       "                        div.style.color = 'darkred';\n",
       "                        div.textContent = 'Error loading resource letsPlotJs';\n",
       "                        document.getElementById(\"kotlin_out_0\").appendChild(div);\n",
       "                    }, false);\n",
       "                    \n",
       "                    e.appendChild(script);\n",
       "                });\n",
       "            })();\n",
       "            </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%useLatestDescriptors\n",
    "%use lets-plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b160d422-2f5f-47c0-abc7-9cb6760a563c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Lets-Plot Kotlin API v.4.11.0. Frontend: Notebook with dynamically loaded JS. Lets-Plot JS v.4.7.0."
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "LetsPlot.getInfo()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "78aa6a27-38e9-48fb-8d0a-80a2d033d343",
   "metadata": {},
   "outputs": [],
   "source": [
    "import kotlin.math.*\n",
    "\n",
    "fun squiggle(x: Double): Double {\n",
    "    return sin(3 * x) / (x * (cos(x) + 2))\n",
    "}\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "939ebce5-565c-44f9-8792-5b2ca6139a98",
   "metadata": {},
   "outputs": [],
   "source": [
    "val N = 50\n",
    "val xs = (0 until N).map { i -> 1.0 + (25.0 - 1.0) * i / (N - 1) }\n",
    "val ys = xs.map { squiggle(it) }\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ddc9d6a-9764-4586-bb07-38c176c93689",
   "metadata": {},
   "source": [
    "#### Local Time\n",
    "\n",
    "`kotlinx.datetime.LocalTime` and `java.time.LocalTime` represent time-of-day values (local/clock time) independent of any specific date. \n",
    "\n",
    "The `datetime` scale renders these with default tooltips and scale breaks optimized for hours or smaller time units.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "28606c26-28a1-4fc9-833a-01538700a790",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "   <div id=\"MDjy9X\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"library\">\n",
       "       if(!window.letsPlotCallQueue) {\n",
       "           window.letsPlotCallQueue = [];\n",
       "       }; \n",
       "       window.letsPlotCall = function(f) {\n",
       "           window.letsPlotCallQueue.push(f);\n",
       "       };\n",
       "       (function() {\n",
       "           var script = document.createElement(\"script\");\n",
       "           script.type = \"text/javascript\";\n",
       "           script.src = \"https://cdn.jsdelivr.net/gh/JetBrains/lets-plot@v4.7.0/js-package/distr/lets-plot.min.js\";\n",
       "           script.onload = function() {\n",
       "               window.letsPlotCall = function(f) {f();};\n",
       "               window.letsPlotCallQueue.forEach(function(f) {f();});\n",
       "               window.letsPlotCallQueue = [];\n",
       "               \n",
       "               \n",
       "           };\n",
       "           script.onerror = function(event) {\n",
       "               window.letsPlotCall = function(f) {};\n",
       "               window.letsPlotCallQueue = [];\n",
       "               var div = document.createElement(\"div\");\n",
       "               div.style.color = 'darkred';\n",
       "               div.textContent = 'Error loading Lets-Plot JS';\n",
       "               document.getElementById(\"MDjy9X\").appendChild(div);\n",
       "           };\n",
       "           var e = document.getElementById(\"MDjy9X\");\n",
       "           e.appendChild(script);\n",
       "       })();\n",
       "   </script>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "data": {
         "xs": [
          28800000,
          29520000,
          30240000,
          30960000,
          31680000,
          32400000,
          33120000,
          33840000,
          34560000,
          35280000,
          36000000,
          36720000,
          37440000,
          38160000,
          38880000,
          39600000,
          40320000,
          41040000,
          41760000,
          42480000,
          43200000,
          43920000,
          44640000,
          45360000,
          46080000,
          46800000,
          47520000,
          48240000,
          48960000,
          49680000,
          50400000,
          51120000,
          51840000,
          52560000,
          53280000,
          54000000,
          54720000,
          55440000,
          56160000,
          56880000,
          57600000,
          58320000,
          59040000,
          59760000,
          60480000,
          61200000,
          61920000,
          62640000,
          63360000,
          64080000
         ],
         "ys": [
          0.05555244654696321,
          -0.31308975753180435,
          -0.10643462133932577,
          0.30009232333113145,
          0.17296312035336703,
          -0.22071111372232088,
          -0.13299780037831993,
          0.08650221374128016,
          0.07517308831149005,
          -0.03457732712883878,
          -0.053011702893076613,
          0.01613253296393087,
          0.05025135841149322,
          -0.006087168607620953,
          -0.06373424084254278,
          -0.007203131933992198,
          0.09508414134219141,
          0.030997473081211188,
          -0.08736932916274698,
          -0.03395485486461525,
          0.042462211485356505,
          0.02498071850034842,
          -0.021846761376655595,
          -0.021667111013930086,
          0.014102019771655625,
          0.02429063240307002,
          -0.010820138233714487,
          -0.03549936052176265,
          0.0074705086233501,
          0.05839869912786762,
          0.002691520004471486,
          -0.055042584594207355,
          -0.010168953244153327,
          0.02907608751881987,
          0.010370233132486369,
          -0.01702935417966255,
          -0.010922022515953079,
          0.012888239469640033,
          0.014111413375350355,
          -0.01242410772629795,
          -0.02311035299814162,
          0.013738836902986275,
          0.040600698558063315,
          -0.009436090766507284,
          -0.03824280857630372,
          0.00021411196390683373,
          0.02149175308850683,
          0.0033093617243690693,
          -0.01387258987880057,
          -0.005185628120854145
         ]
        },
        "data_meta": {
         "series_annotations": [
          {
           "column": "xs",
           "type": "time"
          },
          {
           "column": "ys",
           "type": "float"
          }
         ]
        },
        "ggsize": {
         "height": 400,
         "width": 800
        },
        "ggtoolbar": {},
        "kind": "plot",
        "layers": [
         {
          "geom": "band",
          "mapping": {},
          "position": "identity",
          "stat": "identity",
          "tooltips": {
           "lines": [
            "^xmin - ^xmax",
            "in any time zone"
           ],
           "title": "Lunch Time"
          },
          "xmax": 48600000,
          "xmin": 45000000
         },
         {
          "color": "#1380A1",
          "geom": "line",
          "mapping": {},
          "position": "identity",
          "size": 2,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^x",
             "format": "%H:%M:%S"
            }
           ],
           "lines": [
            "Time:|@xs"
           ]
          }
         }
        ],
        "mapping": {
         "x": "xs",
         "y": "ys"
        },
        "scales": [],
        "theme": {
         "axis_title": "blank"
        }
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"nbeNSO\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"nbeNSO\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "\"x\":\"xs\",\n",
       "\"y\":\"ys\"\n",
       "},\n",
       "\"data\":{\n",
       "\"ys\":[0.05555244654696321,-0.31308975753180435,-0.10643462133932577,0.30009232333113145,0.17296312035336703,-0.22071111372232088,-0.13299780037831993,0.08650221374128016,0.07517308831149005,-0.03457732712883878,-0.053011702893076613,0.01613253296393087,0.05025135841149322,-0.006087168607620953,-0.06373424084254278,-0.007203131933992198,0.09508414134219141,0.030997473081211188,-0.08736932916274698,-0.03395485486461525,0.042462211485356505,0.02498071850034842,-0.021846761376655595,-0.021667111013930086,0.014102019771655625,0.02429063240307002,-0.010820138233714487,-0.03549936052176265,0.0074705086233501,0.05839869912786762,0.002691520004471486,-0.055042584594207355,-0.010168953244153327,0.02907608751881987,0.010370233132486369,-0.01702935417966255,-0.010922022515953079,0.012888239469640033,0.014111413375350355,-0.01242410772629795,-0.02311035299814162,0.013738836902986275,0.040600698558063315,-0.009436090766507284,-0.03824280857630372,2.1411196390683373E-4,0.02149175308850683,0.0033093617243690693,-0.01387258987880057,-0.005185628120854145],\n",
       "\"xs\":[2.88E7,2.952E7,3.024E7,3.096E7,3.168E7,3.24E7,3.312E7,3.384E7,3.456E7,3.528E7,3.6E7,3.672E7,3.744E7,3.816E7,3.888E7,3.96E7,4.032E7,4.104E7,4.176E7,4.248E7,4.32E7,4.392E7,4.464E7,4.536E7,4.608E7,4.68E7,4.752E7,4.824E7,4.896E7,4.968E7,5.04E7,5.112E7,5.184E7,5.256E7,5.328E7,5.4E7,5.472E7,5.544E7,5.616E7,5.688E7,5.76E7,5.832E7,5.904E7,5.976E7,6.048E7,6.12E7,6.192E7,6.264E7,6.336E7,6.408E7]\n",
       "},\n",
       "\"ggsize\":{\n",
       "\"width\":800.0,\n",
       "\"height\":400.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"ggtoolbar\":{\n",
       "},\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"xmin\":4.5E7,\n",
       "\"xmax\":4.86E7,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"band\",\n",
       "\"tooltips\":{\n",
       "\"title\":\"Lunch Time\",\n",
       "\"lines\":[\"^xmin - ^xmax\",\"in any time zone\"]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#1380A1\",\n",
       "\"size\":2.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"line\",\n",
       "\"tooltips\":{\n",
       "\"lines\":[\"Time:|@xs\"],\n",
       "\"formats\":[{\n",
       "\"field\":\"^x\",\n",
       "\"format\":\"%H:%M:%S\"\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"axis_title\":\"blank\"\n",
       "},\n",
       "\"data_meta\":{\n",
       "\"series_annotations\":[{\n",
       "\"type\":\"time\",\n",
       "\"column\":\"xs\"\n",
       "},{\n",
       "\"type\":\"float\",\n",
       "\"column\":\"ys\"\n",
       "}]\n",
       "},\n",
       "\"spec_id\":\"1\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=81eb8353-6dd3-4a61-ba2c-ecba507e0732 width=\"100%\" height=\"100%\" style=\"max-width: 800.0px; max-height: 400.0px;\" viewBox=\"0 0 800.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pvZcM08 .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "   font-style: normal;\n",
       "}\n",
       "#pvZcM08 .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dI8Ls9f .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dI8Ls9f .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pvZcM08 .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dI8Ls9f .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dI8Ls9f .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dI8Ls9f .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pvZcM08\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(6.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"34.40839515110224\" y1=\"0.0\" x2=\"34.40839515110224\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"104.62960974518853\" y1=\"0.0\" x2=\"104.62960974518853\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"174.85082433927482\" y1=\"0.0\" x2=\"174.85082433927482\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"245.07203893336123\" y1=\"0.0\" x2=\"245.07203893336123\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"315.2932535274475\" y1=\"0.0\" x2=\"315.2932535274475\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"385.5144681215338\" y1=\"0.0\" x2=\"385.5144681215338\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"455.7356827156201\" y1=\"0.0\" x2=\"455.7356827156201\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"525.9568973097065\" y1=\"0.0\" x2=\"525.9568973097065\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"596.1781119037927\" y1=\"0.0\" x2=\"596.1781119037927\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"666.3993264978791\" y1=\"0.0\" x2=\"666.3993264978791\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"736.6205410919653\" y1=\"0.0\" x2=\"736.6205410919653\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"345.06623720457424\" x2=\"756.9846933242504\" y2=\"345.06623720457424\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"290.3590701291017\" x2=\"756.9846933242504\" y2=\"290.3590701291017\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"235.65190305362916\" x2=\"756.9846933242504\" y2=\"235.65190305362916\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"180.94473597815661\" x2=\"756.9846933242504\" y2=\"180.94473597815661\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"126.23756890268407\" x2=\"756.9846933242504\" y2=\"126.23756890268407\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"71.53040182721152\" x2=\"756.9846933242504\" y2=\"71.53040182721152\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"16.823234751738966\" x2=\"756.9846933242504\" y2=\"16.823234751738966\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#cbDE0YI)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (756.9846933242504, 369.0)]\">\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <path d=\"M350.4038608244906 369.0 L420.6250754185769 369.0 L420.6250754185769 -2.8421709430404007E-14 L350.4038608244906 -2.8421709430404007E-14 L350.4038608244906 369.0 \" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" fill=\"rgb(71,71,71)\" fill-opacity=\"0.10196078431372549\" stroke-width=\"0.0\">\n",
       "              </path>\n",
       "              <line x1=\"350.4038608244906\" y1=\"369.0\" x2=\"350.4038608244906\" y2=\"-2.8421709430404007E-14\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" fill=\"none\" stroke-width=\"1.6500000000000001\">\n",
       "              </line>\n",
       "              <line x1=\"420.6250754185769\" y1=\"-2.8421709430404007E-14\" x2=\"420.6250754185769\" y2=\"369.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" fill=\"none\" stroke-width=\"1.6500000000000001\">\n",
       "              </line>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <path d=\"M34.40839515110224 150.55356623119687 L34.40839515110224 150.55356623119687 L48.452638069919544 352.22727272727275 L62.496880988736734 239.17210210040813 L76.54112390755404 16.772727272727252 L90.58536682637134 86.32151274748945 L104.62960974518853 301.6895337163629 L118.67385266400584 253.70406483782756 L132.71809558282314 133.6218253827321 L146.76233850164033 139.81966895979724 L160.80658142045763 199.86101210076313 L174.85082433927482 209.94593684942515 L188.89506725809213 172.11908421607328 L202.93931017690943 153.4536413742865 L216.98355309572662 184.27485347849353 L231.02779601454392 215.81193360017056 L245.07203893336123 184.88536539995243 L259.1162818521784 128.9268959118055 L273.1605247709957 163.9868965904438 L287.204767689813 228.74202085594015 L301.2490106086302 199.5204751591759 L315.2932535274475 157.71486299692214 L329.3374964462647 167.27849257151752 L343.381739365082 192.89648022506339 L357.4259822838993 192.79819860097547 L371.4702252027165 173.2299204606608 L385.5144681215338 167.65601912572023 L399.5587110403511 186.86412707947187 L413.6029539591683 200.36543044952165 L427.6471968779856 176.8578323441929 L441.6914397968028 148.99646207637156 L455.7356827156201 179.47228163244063 L469.7799256344374 211.05697469476794 L483.8241685532546 186.50788221926226 L497.8684114720719 165.03803220022522 L511.9126543908891 175.2714752122513 L525.9568973097065 190.26101322109858 L540.0011402285237 186.9198650839798 L554.0453831473409 173.89394527841364 L568.0896260661583 173.2247814861931 L582.1338689849755 187.74161334961912 L596.1781119037927 193.58775540458143 L610.2223548226099 173.42860751941325 L624.2665977414273 158.73324398418794 L638.3108406602445 186.10695391918298 L652.3550835790617 201.86629316034822 L666.3993264978791 180.82760138833353 L680.4435694166963 169.18720670857914 L694.4878123355135 179.1342779304743 L708.5320552543309 188.53403690084713 L722.5762981731481 183.78164621814497 \" fill=\"none\" stroke-width=\"4.4\" stroke=\"rgb(19,128,161)\" stroke-opacity=\"1.0\">\n",
       "                </path>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cx8iPFB\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cbDE0YI\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 369.0 ) \">\n",
       "          <g transform=\"translate(34.40839515110224 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>08:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(104.62960974518853 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>09:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(174.85082433927482 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>10:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(245.07203893336123 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>11:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(315.2932535274475 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>12:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(385.5144681215338 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>13:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(455.7356827156201 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>14:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(525.9568973097065 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>15:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(596.1781119037927 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>16:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(666.3993264978791 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>17:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(736.6205410919653 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>18:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"756.9846933242504\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 345.06623720457424 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 290.3590701291017 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 235.65190305362916 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 180.94473597815661 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 126.23756890268407 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 71.53040182721152 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 16.823234751738966 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"dI8Ls9f\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"81eb8353-6dd3-4a61-ba2c-ecba507e0732\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import kotlinx.datetime.LocalTime\n",
    "\n",
    "// Create time objects at regular intervals: every 12 minutes starting from 8:00 AM\n",
    "val startTime = LocalTime(8, 0)  // 8:00 AM\n",
    "val intervalMinutes = 12\n",
    "val xsTime = (0 until N).map { i ->\n",
    "    val totalMinutes = i * intervalMinutes\n",
    "    val hours = 8 + totalMinutes / 60\n",
    "    val minutes = totalMinutes % 60\n",
    "    LocalTime(hours, minutes)\n",
    "}\n",
    "\n",
    "val data = mapOf(\n",
    "    \"xs\" to xsTime,\n",
    "    \"ys\" to ys\n",
    ")\n",
    "\n",
    "(letsPlot(data = data) { x = \"xs\"; y = \"ys\" } +\n",
    "    geomBand(\n",
    "        xmin = LocalTime(12, 30),        // <-- Use a compatible datatype ('LocalTime' here) for a constant value.\n",
    "        xmax = LocalTime(13, 30),\n",
    "        tooltips = layerTooltips()\n",
    "            .title(\"Lunch Time\")\n",
    "            .line(\"^xmin - ^xmax\")\n",
    "            .line(\"in any time zone\")\n",
    "    ) +\n",
    "    geomLine(\n",
    "        tooltips = layerTooltips()\n",
    "            .line(\"Time:|@xs\")\n",
    "            .format(\"^x\", \"%H:%M:%S\"),\n",
    "        color = \"#1380A1\", \n",
    "        size = 2\n",
    "    ) +\n",
    "    ggtb() + \n",
    "    ggsize(800, 400) + \n",
    "    theme(axisTitle = \"blank\")\n",
    ")    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70657d9d-ad89-4468-bc06-d925ceb39506",
   "metadata": {},
   "source": [
    "#### Local Date\n",
    "\n",
    "`kotlinx.datetime.LocalDate` and `java.time.LocalDate` represent calendar dates without time information. \n",
    "\n",
    "`LocalDate` objects are inherently timezone-agnostic since they contain no time component - a date like \"2024-01-15\" represents the same calendar day regardless of timezone.\n",
    "\n",
    "The `datetime` scale renders these with default tooltips and scale breaks optimized for days or larger time units (weeks, months, years) depending on the data range."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "91e4d1a0-ee52-4969-a6f0-7598679b74d4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "data": {
         "xs": [
          1741996800000,
          1742083200000,
          1742169600000,
          1742256000000,
          1742342400000,
          1742428800000,
          1742515200000,
          1742601600000,
          1742688000000,
          1742774400000,
          1742860800000,
          1742947200000,
          1743033600000,
          1743120000000,
          1743206400000,
          1743292800000,
          1743379200000,
          1743465600000,
          1743552000000,
          1743638400000,
          1743724800000,
          1743811200000,
          1743897600000,
          1743984000000,
          1744070400000,
          1744156800000,
          1744243200000,
          1744329600000,
          1744416000000,
          1744502400000,
          1744588800000,
          1744675200000,
          1744761600000,
          1744848000000,
          1744934400000,
          1745020800000,
          1745107200000,
          1745193600000,
          1745280000000,
          1745366400000,
          1745452800000,
          1745539200000,
          1745625600000,
          1745712000000,
          1745798400000,
          1745884800000,
          1745971200000,
          1746057600000,
          1746144000000,
          1746230400000
         ],
         "ys": [
          0.05555244654696321,
          -0.31308975753180435,
          -0.10643462133932577,
          0.30009232333113145,
          0.17296312035336703,
          -0.22071111372232088,
          -0.13299780037831993,
          0.08650221374128016,
          0.07517308831149005,
          -0.03457732712883878,
          -0.053011702893076613,
          0.01613253296393087,
          0.05025135841149322,
          -0.006087168607620953,
          -0.06373424084254278,
          -0.007203131933992198,
          0.09508414134219141,
          0.030997473081211188,
          -0.08736932916274698,
          -0.03395485486461525,
          0.042462211485356505,
          0.02498071850034842,
          -0.021846761376655595,
          -0.021667111013930086,
          0.014102019771655625,
          0.02429063240307002,
          -0.010820138233714487,
          -0.03549936052176265,
          0.0074705086233501,
          0.05839869912786762,
          0.002691520004471486,
          -0.055042584594207355,
          -0.010168953244153327,
          0.02907608751881987,
          0.010370233132486369,
          -0.01702935417966255,
          -0.010922022515953079,
          0.012888239469640033,
          0.014111413375350355,
          -0.01242410772629795,
          -0.02311035299814162,
          0.013738836902986275,
          0.040600698558063315,
          -0.009436090766507284,
          -0.03824280857630372,
          0.00021411196390683373,
          0.02149175308850683,
          0.0033093617243690693,
          -0.01387258987880057,
          -0.005185628120854145
         ]
        },
        "data_meta": {
         "series_annotations": [
          {
           "column": "xs",
           "type": "date"
          },
          {
           "column": "ys",
           "type": "float"
          }
         ]
        },
        "ggsize": {
         "height": 400,
         "width": 800
        },
        "ggtoolbar": {},
        "kind": "plot",
        "layers": [
         {
          "geom": "vline",
          "linetype": "dotted",
          "mapping": {},
          "position": "identity",
          "size": 1.5,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^xintercept",
             "format": "%a, %b %e, %Y"
            }
           ],
           "title": "April Fools' Day"
          },
          "xintercept": 1743465600000
         },
         {
          "color": "#1380A1",
          "geom": "line",
          "mapping": {},
          "position": "identity",
          "size": 2,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^x",
             "format": "%b %d, %Y"
            }
           ],
           "lines": [
            "Date:|@xs"
           ]
          }
         }
        ],
        "mapping": {
         "x": "xs",
         "y": "ys"
        },
        "scales": [],
        "theme": {
         "axis_title": "blank"
        }
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"diti96\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"diti96\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "\"x\":\"xs\",\n",
       "\"y\":\"ys\"\n",
       "},\n",
       "\"data\":{\n",
       "\"ys\":[0.05555244654696321,-0.31308975753180435,-0.10643462133932577,0.30009232333113145,0.17296312035336703,-0.22071111372232088,-0.13299780037831993,0.08650221374128016,0.07517308831149005,-0.03457732712883878,-0.053011702893076613,0.01613253296393087,0.05025135841149322,-0.006087168607620953,-0.06373424084254278,-0.007203131933992198,0.09508414134219141,0.030997473081211188,-0.08736932916274698,-0.03395485486461525,0.042462211485356505,0.02498071850034842,-0.021846761376655595,-0.021667111013930086,0.014102019771655625,0.02429063240307002,-0.010820138233714487,-0.03549936052176265,0.0074705086233501,0.05839869912786762,0.002691520004471486,-0.055042584594207355,-0.010168953244153327,0.02907608751881987,0.010370233132486369,-0.01702935417966255,-0.010922022515953079,0.012888239469640033,0.014111413375350355,-0.01242410772629795,-0.02311035299814162,0.013738836902986275,0.040600698558063315,-0.009436090766507284,-0.03824280857630372,2.1411196390683373E-4,0.02149175308850683,0.0033093617243690693,-0.01387258987880057,-0.005185628120854145],\n",
       "\"xs\":[1.7419968E12,1.7420832E12,1.7421696E12,1.742256E12,1.7423424E12,1.7424288E12,1.7425152E12,1.7426016E12,1.742688E12,1.7427744E12,1.7428608E12,1.7429472E12,1.7430336E12,1.74312E12,1.7432064E12,1.7432928E12,1.7433792E12,1.7434656E12,1.743552E12,1.7436384E12,1.7437248E12,1.7438112E12,1.7438976E12,1.743984E12,1.7440704E12,1.7441568E12,1.7442432E12,1.7443296E12,1.744416E12,1.7445024E12,1.7445888E12,1.7446752E12,1.7447616E12,1.744848E12,1.7449344E12,1.7450208E12,1.7451072E12,1.7451936E12,1.74528E12,1.7453664E12,1.7454528E12,1.7455392E12,1.7456256E12,1.745712E12,1.7457984E12,1.7458848E12,1.7459712E12,1.7460576E12,1.746144E12,1.7462304E12]\n",
       "},\n",
       "\"ggsize\":{\n",
       "\"width\":800.0,\n",
       "\"height\":400.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"ggtoolbar\":{\n",
       "},\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.5,\n",
       "\"linetype\":\"dotted\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":1.7434656E12,\n",
       "\"geom\":\"vline\",\n",
       "\"tooltips\":{\n",
       "\"title\":\"April Fools' Day\",\n",
       "\"formats\":[{\n",
       "\"field\":\"^xintercept\",\n",
       "\"format\":\"%a, %b %e, %Y\"\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#1380A1\",\n",
       "\"size\":2.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"line\",\n",
       "\"tooltips\":{\n",
       "\"lines\":[\"Date:|@xs\"],\n",
       "\"formats\":[{\n",
       "\"field\":\"^x\",\n",
       "\"format\":\"%b %d, %Y\"\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"axis_title\":\"blank\"\n",
       "},\n",
       "\"data_meta\":{\n",
       "\"series_annotations\":[{\n",
       "\"type\":\"date\",\n",
       "\"column\":\"xs\"\n",
       "},{\n",
       "\"type\":\"float\",\n",
       "\"column\":\"ys\"\n",
       "}]\n",
       "},\n",
       "\"spec_id\":\"3\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=1a5e27d9-b8fa-41fd-bc72-e1d566cf4104 width=\"100%\" height=\"100%\" style=\"max-width: 800.0px; max-height: 400.0px;\" viewBox=\"0 0 800.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pXQvqfQ .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "   font-style: normal;\n",
       "}\n",
       "#pXQvqfQ .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dalLPdr .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dalLPdr .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pXQvqfQ .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dalLPdr .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dalLPdr .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dalLPdr .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pXQvqfQ\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(6.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"62.49688098876504\" y1=\"0.0\" x2=\"62.49688098876504\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"160.80658142047469\" y1=\"0.0\" x2=\"160.80658142047469\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"259.11628185218433\" y1=\"0.0\" x2=\"259.11628185218433\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"357.425982283894\" y1=\"0.0\" x2=\"357.425982283894\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"455.7356827156036\" y1=\"0.0\" x2=\"455.7356827156036\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"554.0453831473133\" y1=\"0.0\" x2=\"554.0453831473133\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"652.3550835790811\" y1=\"0.0\" x2=\"652.3550835790811\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"750.6647840107908\" y1=\"0.0\" x2=\"750.6647840107908\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"345.06623720457424\" x2=\"756.9846933242504\" y2=\"345.06623720457424\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"290.3590701291017\" x2=\"756.9846933242504\" y2=\"290.3590701291017\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"235.65190305362916\" x2=\"756.9846933242504\" y2=\"235.65190305362916\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"180.94473597815661\" x2=\"756.9846933242504\" y2=\"180.94473597815661\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"126.23756890268407\" x2=\"756.9846933242504\" y2=\"126.23756890268407\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"71.53040182721152\" x2=\"756.9846933242504\" y2=\"71.53040182721152\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"16.823234751738966\" x2=\"756.9846933242504\" y2=\"16.823234751738966\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#cmxNGuR)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (756.9846933242504, 369.0)]\">\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <line x1=\"273.16052477096673\" y1=\"369.0\" x2=\"273.16052477096673\" y2=\"-2.8421709430404007E-14\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" fill=\"none\" stroke-width=\"3.3000000000000003\" stroke-dasharray=\"3.3000000000000003,9.9\" stroke-dashoffset=\"0.0\">\n",
       "              </line>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <path d=\"M34.40839515108382 150.55356623119687 L34.40839515108382 150.55356623119687 L48.45263806992443 352.22727272727275 L62.49688098876504 239.17210210040813 L76.54112390754744 16.772727272727252 L90.58536682638805 86.32151274748945 L104.62960974517046 301.6895337163629 L118.67385266401106 253.70406483782756 L132.71809558285167 133.6218253827321 L146.76233850163408 139.81966895979724 L160.80658142047469 199.86101210076313 L174.8508243392571 209.94593684942515 L188.8950672580977 172.11908421607328 L202.9393101768801 153.4536413742865 L216.9835530957207 184.27485347849353 L231.02779601456132 215.81193360017056 L245.07203893334372 184.88536539995243 L259.11628185218433 128.9268959118055 L273.16052477096673 163.9868965904438 L287.20476768980734 228.74202085594015 L301.24901060864795 199.5204751591759 L315.29325352743035 157.71486299692214 L329.33749644627096 167.27849257151752 L343.38173936505336 192.89648022506339 L357.425982283894 192.79819860097547 L371.4702252027346 173.2299204606608 L385.514468121517 167.65601912572023 L399.5587110403576 186.86412707947187 L413.60295395914 200.36543044952165 L427.6471968779806 176.8578323441929 L441.6914397968212 148.99646207637156 L455.7356827156036 179.47228163244063 L469.7799256344442 211.05697469476794 L483.8241685532266 186.50788221926226 L497.86841147206724 165.03803220022522 L511.91265439090785 175.2714752122513 L525.9568973096902 190.26101322109858 L540.0011402285309 186.9198650839798 L554.0453831473133 173.89394527841364 L568.0896260661539 173.2247814861931 L582.1338689849945 187.74161334961912 L596.1781119037769 193.58775540458143 L610.2223548226175 173.42860751941325 L624.2665977413999 158.73324398418794 L638.3108406602405 186.10695391918298 L652.3550835790811 201.86629316034822 L666.3993264978635 180.82760138833353 L680.4435694167041 169.18720670857914 L694.4878123354865 179.1342779304743 L708.5320552543271 188.53403690084713 L722.5762981731677 183.78164621814497 \" fill=\"none\" stroke-width=\"4.4\" stroke=\"rgb(19,128,161)\" stroke-opacity=\"1.0\">\n",
       "                </path>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cwOriYK\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cmxNGuR\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 369.0 ) \">\n",
       "          <g transform=\"translate(62.49688098876504 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 17</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(160.80658142047469 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 24</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(259.11628185218433 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 31</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(357.425982283894 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Apr 7</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(455.7356827156036 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Apr 14</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(554.0453831473133 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Apr 21</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(652.3550835790811 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Apr 28</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(750.6647840107908 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>May 5</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"756.9846933242504\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 345.06623720457424 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 290.3590701291017 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 235.65190305362916 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 180.94473597815661 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 126.23756890268407 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 71.53040182721152 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 16.823234751738966 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"dalLPdr\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"1a5e27d9-b8fa-41fd-bc72-e1d566cf4104\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import kotlinx.datetime.LocalDate\n",
    "import kotlinx.datetime.DatePeriod\n",
    "import kotlinx.datetime.plus\n",
    "\n",
    "// This covers March 15 - May 3, 2025\n",
    "val startDate = LocalDate(2025, 3, 15)\n",
    "val xsDate = (0 until N).map { i ->\n",
    "    startDate + DatePeriod(days = i)\n",
    "}\n",
    "\n",
    "val data = mapOf(\n",
    "    \"xs\" to xsDate,\n",
    "    \"ys\" to ys\n",
    ")\n",
    "\n",
    "(letsPlot(data = data) { x = \"xs\"; y = \"ys\" } +\n",
    "    geomVLine(\n",
    "        xintercept = LocalDate(2025, 4, 1),\n",
    "        tooltips = layerTooltips()\n",
    "            .title(\"April Fools' Day\")\n",
    "            .format(\"^xintercept\", \"%a, %b %e, %Y\"),\n",
    "        linetype = \"dotted\", \n",
    "        size = 1.5\n",
    "    ) +\n",
    "    geomLine(\n",
    "        tooltips = layerTooltips()\n",
    "            .line(\"Date:|@xs\")\n",
    "            .format(\"^x\", \"%b %d, %Y\"),\n",
    "        color = \"#1380A1\", \n",
    "        size = 2\n",
    "    ) +\n",
    "    ggtb() + \n",
    "    ggsize(800, 400) + \n",
    "    theme(axisTitle = \"blank\")\n",
    ")    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66d223d4-b647-4c82-92ac-ee2a12313cd2",
   "metadata": {},
   "source": [
    "#### Date-Time\n",
    "\n",
    "`kotlinx.datetime.LocalDateTime`, `java.time.ZonedDateTime`, and `java.time.OffsetDateTime` represent both date and time information, either timezone-naive or timezone-aware.\n",
    "\n",
    "The datetime scale automatically adapts tooltips and scale breaks based on the data's temporal resolution.\n",
    "\n",
    "**Timezone handling:** If no timezone information is present (`LocalDateTime`), Lets-Plot assumes UTC timezone. <br>\n",
    "For timezone-aware datetime objects (`ZonedDateTime`/`OffsetDateTime`), the timezone information from the data is preserved and used for rendering."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c07138e2-d39f-4922-86b8-0dd3b15c89c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "data": {
         "xs": [
          1743033600000,
          1743045941000,
          1743058283000,
          1743070624000,
          1743082966000,
          1743095308000,
          1743107649000,
          1743119991000,
          1743132333000,
          1743144674000,
          1743157016000,
          1743169357000,
          1743181699000,
          1743194041000,
          1743206382000,
          1743218724000,
          1743231066000,
          1743243407000,
          1743255749000,
          1743268091000,
          1743280432000,
          1743292774000,
          1743305115000,
          1743317457000,
          1743329799000,
          1743342140000,
          1743354482000,
          1743366824000,
          1743379165000,
          1743391507000,
          1743403848000,
          1743416190000,
          1743428532000,
          1743440873000,
          1743453215000,
          1743465557000,
          1743477898000,
          1743490240000,
          1743502582000,
          1743514923000,
          1743527265000,
          1743539606000,
          1743551948000,
          1743564290000,
          1743576631000,
          1743588973000,
          1743601315000,
          1743613656000,
          1743625998000,
          1743638340000
         ],
         "ys": [
          0.05555244654696321,
          -0.31308975753180435,
          -0.10643462133932577,
          0.30009232333113145,
          0.17296312035336703,
          -0.22071111372232088,
          -0.13299780037831993,
          0.08650221374128016,
          0.07517308831149005,
          -0.03457732712883878,
          -0.053011702893076613,
          0.01613253296393087,
          0.05025135841149322,
          -0.006087168607620953,
          -0.06373424084254278,
          -0.007203131933992198,
          0.09508414134219141,
          0.030997473081211188,
          -0.08736932916274698,
          -0.03395485486461525,
          0.042462211485356505,
          0.02498071850034842,
          -0.021846761376655595,
          -0.021667111013930086,
          0.014102019771655625,
          0.02429063240307002,
          -0.010820138233714487,
          -0.03549936052176265,
          0.0074705086233501,
          0.05839869912786762,
          0.002691520004471486,
          -0.055042584594207355,
          -0.010168953244153327,
          0.02907608751881987,
          0.010370233132486369,
          -0.01702935417966255,
          -0.010922022515953079,
          0.012888239469640033,
          0.014111413375350355,
          -0.01242410772629795,
          -0.02311035299814162,
          0.013738836902986275,
          0.040600698558063315,
          -0.009436090766507284,
          -0.03824280857630372,
          0.00021411196390683373,
          0.02149175308850683,
          0.0033093617243690693,
          -0.01387258987880057,
          -0.005185628120854145
         ]
        },
        "data_meta": {
         "series_annotations": [
          {
           "column": "xs",
           "time_zone": "Europe/Berlin",
           "type": "datetime"
          },
          {
           "column": "ys",
           "type": "float"
          }
         ]
        },
        "ggsize": {
         "height": 400,
         "width": 800
        },
        "ggtoolbar": {},
        "kind": "plot",
        "layers": [
         {
          "geom": "vline",
          "linetype": "dotted",
          "mapping": {},
          "position": "identity",
          "size": 1.5,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^xintercept",
             "format": "%b %d, %Y %H:%M:%S"
            }
           ],
           "lines": [
            "^xintercept",
            "2:00 AM → 3:00 AM"
           ],
           "title": "Berlin \"spring forward\" transition"
          },
          "xintercept": 1743296399000
         },
         {
          "color": "#1380A1",
          "geom": "line",
          "mapping": {},
          "position": "identity",
          "size": 2,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^x",
             "format": "%b %d, %Y %H:%M"
            }
           ],
           "lines": [
            "@xs"
           ]
          }
         }
        ],
        "mapping": {
         "x": "xs",
         "y": "ys"
        },
        "scales": [],
        "theme": {
         "axis_title": "blank"
        }
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"IIFjNF\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"IIFjNF\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "\"x\":\"xs\",\n",
       "\"y\":\"ys\"\n",
       "},\n",
       "\"data\":{\n",
       "\"ys\":[0.05555244654696321,-0.31308975753180435,-0.10643462133932577,0.30009232333113145,0.17296312035336703,-0.22071111372232088,-0.13299780037831993,0.08650221374128016,0.07517308831149005,-0.03457732712883878,-0.053011702893076613,0.01613253296393087,0.05025135841149322,-0.006087168607620953,-0.06373424084254278,-0.007203131933992198,0.09508414134219141,0.030997473081211188,-0.08736932916274698,-0.03395485486461525,0.042462211485356505,0.02498071850034842,-0.021846761376655595,-0.021667111013930086,0.014102019771655625,0.02429063240307002,-0.010820138233714487,-0.03549936052176265,0.0074705086233501,0.05839869912786762,0.002691520004471486,-0.055042584594207355,-0.010168953244153327,0.02907608751881987,0.010370233132486369,-0.01702935417966255,-0.010922022515953079,0.012888239469640033,0.014111413375350355,-0.01242410772629795,-0.02311035299814162,0.013738836902986275,0.040600698558063315,-0.009436090766507284,-0.03824280857630372,2.1411196390683373E-4,0.02149175308850683,0.0033093617243690693,-0.01387258987880057,-0.005185628120854145],\n",
       "\"xs\":[1.7430336E12,1.743045941E12,1.743058283E12,1.743070624E12,1.743082966E12,1.743095308E12,1.743107649E12,1.743119991E12,1.743132333E12,1.743144674E12,1.743157016E12,1.743169357E12,1.743181699E12,1.743194041E12,1.743206382E12,1.743218724E12,1.743231066E12,1.743243407E12,1.743255749E12,1.743268091E12,1.743280432E12,1.743292774E12,1.743305115E12,1.743317457E12,1.743329799E12,1.74334214E12,1.743354482E12,1.743366824E12,1.743379165E12,1.743391507E12,1.743403848E12,1.74341619E12,1.743428532E12,1.743440873E12,1.743453215E12,1.743465557E12,1.743477898E12,1.74349024E12,1.743502582E12,1.743514923E12,1.743527265E12,1.743539606E12,1.743551948E12,1.74356429E12,1.743576631E12,1.743588973E12,1.743601315E12,1.743613656E12,1.743625998E12,1.74363834E12]\n",
       "},\n",
       "\"ggsize\":{\n",
       "\"width\":800.0,\n",
       "\"height\":400.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"ggtoolbar\":{\n",
       "},\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.5,\n",
       "\"linetype\":\"dotted\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":1.743296399E12,\n",
       "\"geom\":\"vline\",\n",
       "\"tooltips\":{\n",
       "\"formats\":[{\n",
       "\"field\":\"^xintercept\",\n",
       "\"format\":\"%b %d, %Y %H:%M:%S\"\n",
       "}],\n",
       "\"title\":\"Berlin \\\"spring forward\\\" transition\",\n",
       "\"lines\":[\"^xintercept\",\"2:00 AM → 3:00 AM\"]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#1380A1\",\n",
       "\"size\":2.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"line\",\n",
       "\"tooltips\":{\n",
       "\"lines\":[\"@xs\"],\n",
       "\"formats\":[{\n",
       "\"field\":\"^x\",\n",
       "\"format\":\"%b %d, %Y %H:%M\"\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"axis_title\":\"blank\"\n",
       "},\n",
       "\"data_meta\":{\n",
       "\"series_annotations\":[{\n",
       "\"type\":\"datetime\",\n",
       "\"time_zone\":\"Europe/Berlin\",\n",
       "\"column\":\"xs\"\n",
       "},{\n",
       "\"type\":\"float\",\n",
       "\"column\":\"ys\"\n",
       "}]\n",
       "},\n",
       "\"spec_id\":\"5\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=c6a003a1-17d5-443f-91ca-3e46c6f678fc width=\"100%\" height=\"100%\" style=\"max-width: 800.0px; max-height: 400.0px;\" viewBox=\"0 0 800.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pEwP4My .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "   font-style: normal;\n",
       "}\n",
       "#pEwP4My .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dETn1zk .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dETn1zk .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pEwP4My .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dETn1zk .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dETn1zk .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dETn1zk .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pEwP4My\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(6.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"30.31175122014247\" y1=\"0.0\" x2=\"30.31175122014247\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"128.6312055659946\" y1=\"0.0\" x2=\"128.6312055659946\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"226.95065991184674\" y1=\"0.0\" x2=\"226.95065991184674\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"325.27011425746605\" y1=\"0.0\" x2=\"325.27011425746605\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"419.4929246723186\" y1=\"0.0\" x2=\"419.4929246723186\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"517.8123790181708\" y1=\"0.0\" x2=\"517.8123790181708\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"616.1318333640229\" y1=\"0.0\" x2=\"616.1318333640229\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"714.451287709875\" y1=\"0.0\" x2=\"714.451287709875\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"345.06623720457424\" x2=\"756.9846933242504\" y2=\"345.06623720457424\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"290.3590701291017\" x2=\"756.9846933242504\" y2=\"290.3590701291017\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"235.65190305362916\" x2=\"756.9846933242504\" y2=\"235.65190305362916\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"180.94473597815661\" x2=\"756.9846933242504\" y2=\"180.94473597815661\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"126.23756890268407\" x2=\"756.9846933242504\" y2=\"126.23756890268407\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"71.53040182721152\" x2=\"756.9846933242504\" y2=\"71.53040182721152\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"16.823234751738966\" x2=\"756.9846933242504\" y2=\"16.823234751738966\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#c2f0B1K)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (756.9846933242504, 369.0)]\">\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <line x1=\"333.4622641631868\" y1=\"369.0\" x2=\"333.4622641631868\" y2=\"-2.8421709430404007E-14\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" fill=\"none\" stroke-width=\"3.3000000000000003\" stroke-dasharray=\"3.3000000000000003,9.9\" stroke-dashoffset=\"0.0\">\n",
       "              </line>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <path d=\"M34.40839515114203 150.55356623119687 L34.40839515114203 150.55356623119687 L48.451918138191104 352.22727272727275 L62.49657908198424 239.17210210040813 L76.54010206903331 16.772727272727252 L90.58476301259361 86.32151274748945 L104.62942395638674 301.6895337163629 L118.67294694343582 253.70406483782756 L132.71760788722895 133.6218253827321 L146.76226883078925 139.81966895979724 L160.80579181783833 199.86101210076313 L174.85045276163146 209.94593684942515 L188.89397574868053 172.11908421607328 L202.93863669247366 153.4536413742865 L216.98329763603397 184.27485347849353 L231.02682062308304 215.81193360017056 L245.07148156687617 184.88536539995243 L259.1161425106693 128.9268959118055 L273.1596654977184 163.9868965904438 L287.2043264412787 228.74202085594015 L301.2489873850718 199.5204751591759 L315.2925103721209 157.71486299692214 L329.337171315914 167.27849257151752 L343.3806943029631 192.89648022506339 L357.4253552465234 192.79819860097547 L371.4700161903165 173.2299204606608 L385.5135391773656 167.65601912572023 L399.55820012115873 186.86412707947187 L413.60286106471904 200.36543044952165 L427.6463840517681 176.8578323441929 L441.69104499556124 148.99646207637156 L455.7345679826103 179.47228163244063 L469.77922892640345 211.05697469476794 L483.82388986996375 186.50788221926226 L497.8674128570128 165.03803220022522 L511.91207380080596 175.2714752122513 L525.9567347445991 190.26101322109858 L540.0002577316482 186.9198650839798 L554.0449186752085 173.89394527841364 L568.0895796190016 173.2247814861931 L582.1331026060507 187.74161334961912 L596.1777635498438 193.58775540458143 L610.2212865368929 173.42860751941325 L624.2659474804532 158.73324398418794 L638.3106084242463 186.10695391918298 L652.3541314112954 201.86629316034822 L666.3987923550885 180.82760138833353 L680.4434532986488 169.18720670857914 L694.4869762856979 179.1342779304743 L708.531637229491 188.53403690084713 L722.5762981732842 183.78164621814497 \" fill=\"none\" stroke-width=\"4.4\" stroke=\"rgb(19,128,161)\" stroke-opacity=\"1.0\">\n",
       "                </path>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cb1C5RY\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"c2f0B1K\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 369.0 ) \">\n",
       "          <g transform=\"translate(30.31175122014247 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 27</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(128.6312055659946 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 28</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(226.95065991184674 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 29</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(325.27011425746605 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 30</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(419.4929246723186 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Mar 31</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(517.8123790181708 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Apr 1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(616.1318333640229 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Apr 2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(714.451287709875 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>Apr 3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"756.9846933242504\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 345.06623720457424 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 290.3590701291017 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 235.65190305362916 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 180.94473597815661 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 126.23756890268407 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 71.53040182721152 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 16.823234751738966 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"dETn1zk\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"c6a003a1-17d5-443f-91ca-3e46c6f678fc\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import java.time.ZonedDateTime\n",
    "import java.time.ZoneId\n",
    "import java.time.Instant\n",
    "\n",
    "// Berlin DST transition: March 30, 2025 at 2:00 AM\n",
    "// Cover ±3 days: March 27 - April 2, 2025 (6 days total)\n",
    "\n",
    "// Generate equally spaced UNIX timestamps (in seconds)\n",
    "val startTimestamp = ZonedDateTime.of(2025, 3, 27, 0, 0, 0, 0, ZoneId.of(\"UTC\")).toEpochSecond()\n",
    "val endTimestamp = ZonedDateTime.of(2025, 4, 2, 23, 59, 0, 0, ZoneId.of(\"UTC\")).toEpochSecond()\n",
    "val unixTimestamps = (0 until N).map { i -> \n",
    "    startTimestamp + (endTimestamp - startTimestamp) * i / (N - 1) \n",
    "}\n",
    "\n",
    "// Convert to ZonedDateTime with Berlin timezone\n",
    "val xsDatetime = unixTimestamps.map { timestamp ->\n",
    "    Instant.ofEpochSecond(timestamp).atZone(ZoneId.of(\"Europe/Berlin\"))\n",
    "}\n",
    "\n",
    "val data = mapOf(\n",
    "    \"xs\" to xsDatetime,\n",
    "    \"ys\" to ys\n",
    ")\n",
    "\n",
    "val p = letsPlot(data = data) { x = \"xs\"; y = \"ys\" } +\n",
    "    geomVLine(\n",
    "        xintercept = ZonedDateTime.of(2025, 3, 30, 1, 59, 59, 0, ZoneId.of(\"Europe/Berlin\")),\n",
    "        tooltips = layerTooltips()\n",
    "            .title(\"Berlin \\\"spring forward\\\" transition\")\n",
    "            .line(\"^xintercept\").format(\"^xintercept\", \"%b %d, %Y %H:%M:%S\")\n",
    "            .line(\"2:00 AM → 3:00 AM\"),\n",
    "        linetype = \"dotted\", \n",
    "        size = 1.5\n",
    "    ) +\n",
    "    geomLine(\n",
    "        tooltips = layerTooltips()\n",
    "            .line(\"@xs\")\n",
    "            .format(\"^x\", \"%b %d, %Y %H:%M\"),\n",
    "        color = \"#1380A1\", \n",
    "        size = 2\n",
    "    ) +\n",
    "    ggtb() + \n",
    "    ggsize(800, 400) + \n",
    "    theme(axisTitle = \"blank\")\n",
    "\n",
    "p    "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2808279e-7d15-4ee4-a8cd-66f7f660e323",
   "metadata": {},
   "source": [
    "#### Zoomed-in View: Berlin Start of DST Transition Details\n",
    "\n",
    "This plot zooms into the DST transition period: ±8 hours around March 30, 2025 at 2:00 AM.\n",
    "\n",
    "Notice that the time 2025-03-30 02:00:00 through 2025-03-30 02:59:59 does not exist in Europe/Berlin timezone - clocks spring forward directly from 01:59:59 to 03:00:00, creating a gap in the timeline."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0157325d-e12e-499c-abd9-b9142be34b9b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "coord": {
         "flip": false,
         "name": "cartesian",
         "xlim": [
          1743278400000,
          1743314400000
         ]
        },
        "data": {
         "xs": [
          1743033600000,
          1743045941000,
          1743058283000,
          1743070624000,
          1743082966000,
          1743095308000,
          1743107649000,
          1743119991000,
          1743132333000,
          1743144674000,
          1743157016000,
          1743169357000,
          1743181699000,
          1743194041000,
          1743206382000,
          1743218724000,
          1743231066000,
          1743243407000,
          1743255749000,
          1743268091000,
          1743280432000,
          1743292774000,
          1743305115000,
          1743317457000,
          1743329799000,
          1743342140000,
          1743354482000,
          1743366824000,
          1743379165000,
          1743391507000,
          1743403848000,
          1743416190000,
          1743428532000,
          1743440873000,
          1743453215000,
          1743465557000,
          1743477898000,
          1743490240000,
          1743502582000,
          1743514923000,
          1743527265000,
          1743539606000,
          1743551948000,
          1743564290000,
          1743576631000,
          1743588973000,
          1743601315000,
          1743613656000,
          1743625998000,
          1743638340000
         ],
         "ys": [
          0.05555244654696321,
          -0.31308975753180435,
          -0.10643462133932577,
          0.30009232333113145,
          0.17296312035336703,
          -0.22071111372232088,
          -0.13299780037831993,
          0.08650221374128016,
          0.07517308831149005,
          -0.03457732712883878,
          -0.053011702893076613,
          0.01613253296393087,
          0.05025135841149322,
          -0.006087168607620953,
          -0.06373424084254278,
          -0.007203131933992198,
          0.09508414134219141,
          0.030997473081211188,
          -0.08736932916274698,
          -0.03395485486461525,
          0.042462211485356505,
          0.02498071850034842,
          -0.021846761376655595,
          -0.021667111013930086,
          0.014102019771655625,
          0.02429063240307002,
          -0.010820138233714487,
          -0.03549936052176265,
          0.0074705086233501,
          0.05839869912786762,
          0.002691520004471486,
          -0.055042584594207355,
          -0.010168953244153327,
          0.02907608751881987,
          0.010370233132486369,
          -0.01702935417966255,
          -0.010922022515953079,
          0.012888239469640033,
          0.014111413375350355,
          -0.01242410772629795,
          -0.02311035299814162,
          0.013738836902986275,
          0.040600698558063315,
          -0.009436090766507284,
          -0.03824280857630372,
          0.00021411196390683373,
          0.02149175308850683,
          0.0033093617243690693,
          -0.01387258987880057,
          -0.005185628120854145
         ]
        },
        "data_meta": {
         "series_annotations": [
          {
           "column": "xs",
           "time_zone": "Europe/Berlin",
           "type": "datetime"
          },
          {
           "column": "ys",
           "type": "float"
          }
         ]
        },
        "ggsize": {
         "height": 400,
         "width": 800
        },
        "ggtoolbar": {},
        "kind": "plot",
        "layers": [
         {
          "geom": "vline",
          "linetype": "dotted",
          "mapping": {},
          "position": "identity",
          "size": 1.5,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^xintercept",
             "format": "%b %d, %Y %H:%M:%S"
            }
           ],
           "lines": [
            "^xintercept",
            "2:00 AM → 3:00 AM"
           ],
           "title": "Berlin \"spring forward\" transition"
          },
          "xintercept": 1743296399000
         },
         {
          "color": "#1380A1",
          "geom": "line",
          "mapping": {},
          "position": "identity",
          "size": 2,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^x",
             "format": "%b %d, %Y %H:%M"
            }
           ],
           "lines": [
            "@xs"
           ]
          }
         }
        ],
        "mapping": {
         "x": "xs",
         "y": "ys"
        },
        "scales": [],
        "theme": {
         "axis_title": "blank"
        }
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"Co7bAC\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"Co7bAC\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "\"x\":\"xs\",\n",
       "\"y\":\"ys\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"cartesian\",\n",
       "\"xlim\":[1.7432784E12,1.7433144E12],\n",
       "\"flip\":false\n",
       "},\n",
       "\"data\":{\n",
       "\"ys\":[0.05555244654696321,-0.31308975753180435,-0.10643462133932577,0.30009232333113145,0.17296312035336703,-0.22071111372232088,-0.13299780037831993,0.08650221374128016,0.07517308831149005,-0.03457732712883878,-0.053011702893076613,0.01613253296393087,0.05025135841149322,-0.006087168607620953,-0.06373424084254278,-0.007203131933992198,0.09508414134219141,0.030997473081211188,-0.08736932916274698,-0.03395485486461525,0.042462211485356505,0.02498071850034842,-0.021846761376655595,-0.021667111013930086,0.014102019771655625,0.02429063240307002,-0.010820138233714487,-0.03549936052176265,0.0074705086233501,0.05839869912786762,0.002691520004471486,-0.055042584594207355,-0.010168953244153327,0.02907608751881987,0.010370233132486369,-0.01702935417966255,-0.010922022515953079,0.012888239469640033,0.014111413375350355,-0.01242410772629795,-0.02311035299814162,0.013738836902986275,0.040600698558063315,-0.009436090766507284,-0.03824280857630372,2.1411196390683373E-4,0.02149175308850683,0.0033093617243690693,-0.01387258987880057,-0.005185628120854145],\n",
       "\"xs\":[1.7430336E12,1.743045941E12,1.743058283E12,1.743070624E12,1.743082966E12,1.743095308E12,1.743107649E12,1.743119991E12,1.743132333E12,1.743144674E12,1.743157016E12,1.743169357E12,1.743181699E12,1.743194041E12,1.743206382E12,1.743218724E12,1.743231066E12,1.743243407E12,1.743255749E12,1.743268091E12,1.743280432E12,1.743292774E12,1.743305115E12,1.743317457E12,1.743329799E12,1.74334214E12,1.743354482E12,1.743366824E12,1.743379165E12,1.743391507E12,1.743403848E12,1.74341619E12,1.743428532E12,1.743440873E12,1.743453215E12,1.743465557E12,1.743477898E12,1.74349024E12,1.743502582E12,1.743514923E12,1.743527265E12,1.743539606E12,1.743551948E12,1.74356429E12,1.743576631E12,1.743588973E12,1.743601315E12,1.743613656E12,1.743625998E12,1.74363834E12]\n",
       "},\n",
       "\"ggsize\":{\n",
       "\"width\":800.0,\n",
       "\"height\":400.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"ggtoolbar\":{\n",
       "},\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.5,\n",
       "\"linetype\":\"dotted\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":1.743296399E12,\n",
       "\"geom\":\"vline\",\n",
       "\"tooltips\":{\n",
       "\"formats\":[{\n",
       "\"field\":\"^xintercept\",\n",
       "\"format\":\"%b %d, %Y %H:%M:%S\"\n",
       "}],\n",
       "\"title\":\"Berlin \\\"spring forward\\\" transition\",\n",
       "\"lines\":[\"^xintercept\",\"2:00 AM → 3:00 AM\"]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#1380A1\",\n",
       "\"size\":2.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"line\",\n",
       "\"tooltips\":{\n",
       "\"lines\":[\"@xs\"],\n",
       "\"formats\":[{\n",
       "\"field\":\"^x\",\n",
       "\"format\":\"%b %d, %Y %H:%M\"\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"axis_title\":\"blank\"\n",
       "},\n",
       "\"data_meta\":{\n",
       "\"series_annotations\":[{\n",
       "\"type\":\"datetime\",\n",
       "\"time_zone\":\"Europe/Berlin\",\n",
       "\"column\":\"xs\"\n",
       "},{\n",
       "\"type\":\"float\",\n",
       "\"column\":\"ys\"\n",
       "}]\n",
       "},\n",
       "\"spec_id\":\"7\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=ae96a1bd-3120-4578-8e0a-3ff402b78700 width=\"100%\" height=\"100%\" style=\"max-width: 800.0px; max-height: 400.0px;\" viewBox=\"0 0 800.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pqzricW .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "   font-style: normal;\n",
       "}\n",
       "#pqzricW .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d0AgJ5n .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d0AgJ5n .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pqzricW .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d0AgJ5n .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d0AgJ5n .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#d0AgJ5n .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pqzricW\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(6.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"0.0\" x2=\"0.0\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"75.69846933335066\" y1=\"0.0\" x2=\"75.69846933335066\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"151.39693865925074\" y1=\"0.0\" x2=\"151.39693865925074\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"227.0954079926014\" y1=\"0.0\" x2=\"227.0954079926014\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"302.79387732595205\" y1=\"0.0\" x2=\"302.79387732595205\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"378.4923466593027\" y1=\"0.0\" x2=\"378.4923466593027\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"454.19081599265337\" y1=\"0.0\" x2=\"454.19081599265337\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"529.889285326004\" y1=\"0.0\" x2=\"529.889285326004\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"605.5877546593547\" y1=\"0.0\" x2=\"605.5877546593547\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"681.2862239927053\" y1=\"0.0\" x2=\"681.2862239927053\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"756.9846933186054\" y1=\"0.0\" x2=\"756.9846933186054\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"345.06623720457424\" x2=\"756.9846933242504\" y2=\"345.06623720457424\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"290.3590701291017\" x2=\"756.9846933242504\" y2=\"290.3590701291017\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"235.65190305362916\" x2=\"756.9846933242504\" y2=\"235.65190305362916\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"180.94473597815661\" x2=\"756.9846933242504\" y2=\"180.94473597815661\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"126.23756890268407\" x2=\"756.9846933242504\" y2=\"126.23756890268407\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"71.53040182721152\" x2=\"756.9846933242504\" y2=\"71.53040182721152\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"16.823234751738966\" x2=\"756.9846933242504\" y2=\"16.823234751738966\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#cGZenEv)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (756.9846933242504, 369.0)]\">\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <line x1=\"378.4713193103671\" y1=\"369.0\" x2=\"378.4713193103671\" y2=\"-2.8421709430404007E-14\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" fill=\"none\" stroke-width=\"3.3000000000000003\" stroke-dasharray=\"3.3000000000000003,9.9\" stroke-dashoffset=\"0.0\">\n",
       "              </line>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <path d=\"M-5147.49591460824 150.55356623119687 L-5147.49591460824 150.55356623119687 L-4887.997356265783 352.22727272727275 L-4628.47777056694 239.17210210040813 L-4368.979212231934 16.772727272727252 L-4109.459626533091 86.32151274748945 L-3849.9400408416986 301.6895337163629 L-3590.441482499242 253.70406483782756 L-3330.921896800399 133.6218253827321 L-3071.4023111090064 139.81966895979724 L-2811.9037527665496 199.86101210076313 L-2552.3841670677066 209.94593684942515 L-2292.8856087252498 172.11908421607328 L-2033.3660230338573 153.4536413742865 L-1773.846437342465 184.27485347849353 L-1514.347879000008 215.81193360017056 L-1254.828293301165 184.88536539995243 L-995.3087076097727 128.9268959118055 L-735.8101492673159 163.9868965904438 L-476.29056356847286 228.74202085594015 L-216.77097787708044 199.5204751591759 L42.72758046537638 157.71486299692214 L302.2471661567688 167.27849257151752 L561.7457244992256 192.89648022506339 L821.2653101980686 192.79819860097547 L1080.784895889461 173.2299204606608 L1340.2834542319179 167.65601912572023 L1599.8030399307609 186.86412707947187 L1859.3226256221533 200.36543044952165 L2118.82118396461 176.8578323441929 L2378.3407696560025 148.99646207637156 L2637.8393279984593 179.47228163244063 L2897.3589136973023 211.05697469476794 L3156.8784993886948 186.50788221926226 L3416.3770577311516 165.03803220022522 L3675.8966434299946 175.2714752122513 L3935.416229121387 190.26101322109858 L4194.914787463844 186.9198650839798 L4454.434373162687 173.89394527841364 L4713.953958854079 173.2247814861931 L4973.452517196536 187.74161334961912 L5232.9721028879285 193.58775540458143 L5492.470661230385 173.42860751941325 L5751.990246929228 158.73324398418794 L6011.509832620621 186.10695391918298 L6271.0083909630775 201.86629316034822 L6530.527976661921 180.82760138833353 L6790.047562353313 169.18720670857914 L7049.54612069577 179.1342779304743 L7309.065706387162 188.53403690084713 L7568.585292086005 183.78164621814497 \" fill=\"none\" stroke-width=\"4.4\" stroke=\"rgb(19,128,161)\" stroke-opacity=\"1.0\">\n",
       "                </path>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cbhAHvM\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cGZenEv\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 369.0 ) \">\n",
       "          <g transform=\"translate(0.0 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>21:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(75.69846933335066 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>22:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(151.39693865925074 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>23:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(227.0954079926014 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>00:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(302.79387732595205 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>01:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(378.4923466593027 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>03:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(454.19081599265337 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>04:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(529.889285326004 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>05:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(605.5877546593547 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>06:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(681.2862239927053 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>07:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(756.9846933186054 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>08:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"756.9846933242504\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 345.06623720457424 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 290.3590701291017 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 235.65190305362916 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 180.94473597815661 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 126.23756890268407 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 71.53040182721152 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 16.823234751738966 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"d0AgJ5n\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"ae96a1bd-3120-4578-8e0a-3ff402b78700\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p + coordCartesian(\n",
    "    xlim = Pair(\n",
    "        ZonedDateTime.of(2025, 3, 29, 21, 0, 0, 0, ZoneId.of(\"Europe/Berlin\")),\n",
    "        ZonedDateTime.of(2025, 3, 30, 8, 0, 0, 0, ZoneId.of(\"Europe/Berlin\"))\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f01d9cc1-8224-4301-876a-040b7c387391",
   "metadata": {},
   "source": [
    "#### Berlin End of DST Transition Details\n",
    "\n",
    "The mirroring phenomenon can be observed during Berlin's end of DST transition: around October 26, 2025 at 2:00 AM.\n",
    "\n",
    "Notice that the time 2025-10-26 02:00:00 through 2025-10-26 02:59:59 appears twice in Europe/Berlin timezone - clocks fall back from 02:59:59 to 02:00:00, creating a duplication in the timeline where the same hour occurs twice."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "15fc061c-4725-44b0-94bf-413c085f9363",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/plot+json": {
       "apply_color_scheme": true,
       "output": {
        "coord": {
         "flip": false,
         "name": "cartesian",
         "xlim": [
          1761422400000,
          1761462000000
         ]
        },
        "data": {
         "xs": [
          1761177600000,
          1761189941000,
          1761202283000,
          1761214624000,
          1761226966000,
          1761239308000,
          1761251649000,
          1761263991000,
          1761276333000,
          1761288674000,
          1761301016000,
          1761313357000,
          1761325699000,
          1761338041000,
          1761350382000,
          1761362724000,
          1761375066000,
          1761387407000,
          1761399749000,
          1761412091000,
          1761424432000,
          1761436774000,
          1761449115000,
          1761461457000,
          1761473799000,
          1761486140000,
          1761498482000,
          1761510824000,
          1761523165000,
          1761535507000,
          1761547848000,
          1761560190000,
          1761572532000,
          1761584873000,
          1761597215000,
          1761609557000,
          1761621898000,
          1761634240000,
          1761646582000,
          1761658923000,
          1761671265000,
          1761683606000,
          1761695948000,
          1761708290000,
          1761720631000,
          1761732973000,
          1761745315000,
          1761757656000,
          1761769998000,
          1761782340000
         ],
         "ys": [
          0.05555244654696321,
          -0.31308975753180435,
          -0.10643462133932577,
          0.30009232333113145,
          0.17296312035336703,
          -0.22071111372232088,
          -0.13299780037831993,
          0.08650221374128016,
          0.07517308831149005,
          -0.03457732712883878,
          -0.053011702893076613,
          0.01613253296393087,
          0.05025135841149322,
          -0.006087168607620953,
          -0.06373424084254278,
          -0.007203131933992198,
          0.09508414134219141,
          0.030997473081211188,
          -0.08736932916274698,
          -0.03395485486461525,
          0.042462211485356505,
          0.02498071850034842,
          -0.021846761376655595,
          -0.021667111013930086,
          0.014102019771655625,
          0.02429063240307002,
          -0.010820138233714487,
          -0.03549936052176265,
          0.0074705086233501,
          0.05839869912786762,
          0.002691520004471486,
          -0.055042584594207355,
          -0.010168953244153327,
          0.02907608751881987,
          0.010370233132486369,
          -0.01702935417966255,
          -0.010922022515953079,
          0.012888239469640033,
          0.014111413375350355,
          -0.01242410772629795,
          -0.02311035299814162,
          0.013738836902986275,
          0.040600698558063315,
          -0.009436090766507284,
          -0.03824280857630372,
          0.00021411196390683373,
          0.02149175308850683,
          0.0033093617243690693,
          -0.01387258987880057,
          -0.005185628120854145
         ]
        },
        "data_meta": {
         "series_annotations": [
          {
           "column": "xs",
           "time_zone": "Europe/Berlin",
           "type": "datetime"
          },
          {
           "column": "ys",
           "type": "float"
          }
         ]
        },
        "ggsize": {
         "height": 400,
         "width": 800
        },
        "ggtoolbar": {},
        "kind": "plot",
        "layers": [
         {
          "geom": "vline",
          "linetype": "dotted",
          "mapping": {},
          "position": "identity",
          "size": 1.5,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^xintercept",
             "format": "%b %d, %Y %H:%M:%S"
            }
           ],
           "lines": [
            "^xintercept",
            "3:00 AM → 2:00 AM"
           ],
           "title": "Berlin \"fall back\" transition"
          },
          "xintercept": 1761440399000
         },
         {
          "color": "#1380A1",
          "geom": "line",
          "mapping": {},
          "position": "identity",
          "size": 2,
          "stat": "identity",
          "tooltips": {
           "formats": [
            {
             "field": "^x",
             "format": "%b %d, %Y %H:%M"
            }
           ],
           "lines": [
            "@xs"
           ]
          }
         }
        ],
        "mapping": {
         "x": "xs",
         "y": "ys"
        },
        "scales": [],
        "theme": {
         "axis_title": "blank"
        }
       },
       "output_type": "lets_plot_spec",
       "swing_enabled": true
      },
      "text/html": [
       "   <div id=\"0vwMSE\"></div>\n",
       "   <script type=\"text/javascript\" data-lets-plot-script=\"plot\">\n",
       "   \n",
       "   (function() {\n",
       "   // ----------\n",
       "   \n",
       "   const forceImmediateRender = false;\n",
       "   const responsive = false;\n",
       "   \n",
       "   let sizing = {\n",
       "       width_mode: \"MIN\",\n",
       "       height_mode: \"SCALED\",\n",
       "       width: null, \n",
       "       height: null \n",
       "   };\n",
       "   \n",
       "   const preferredWidth = document.body.dataset.letsPlotPreferredWidth;\n",
       "   if (preferredWidth !== undefined) {\n",
       "       sizing = {\n",
       "           width_mode: 'FIXED',\n",
       "           height_mode: 'SCALED',\n",
       "           width: parseFloat(preferredWidth)\n",
       "       };\n",
       "   }\n",
       "   \n",
       "   const containerDiv = document.getElementById(\"0vwMSE\");\n",
       "   let fig = null;\n",
       "   \n",
       "   function renderPlot() {\n",
       "       if (fig === null) {\n",
       "           const plotSpec = {\n",
       "\"mapping\":{\n",
       "\"x\":\"xs\",\n",
       "\"y\":\"ys\"\n",
       "},\n",
       "\"coord\":{\n",
       "\"name\":\"cartesian\",\n",
       "\"xlim\":[1.7614224E12,1.761462E12],\n",
       "\"flip\":false\n",
       "},\n",
       "\"data\":{\n",
       "\"ys\":[0.05555244654696321,-0.31308975753180435,-0.10643462133932577,0.30009232333113145,0.17296312035336703,-0.22071111372232088,-0.13299780037831993,0.08650221374128016,0.07517308831149005,-0.03457732712883878,-0.053011702893076613,0.01613253296393087,0.05025135841149322,-0.006087168607620953,-0.06373424084254278,-0.007203131933992198,0.09508414134219141,0.030997473081211188,-0.08736932916274698,-0.03395485486461525,0.042462211485356505,0.02498071850034842,-0.021846761376655595,-0.021667111013930086,0.014102019771655625,0.02429063240307002,-0.010820138233714487,-0.03549936052176265,0.0074705086233501,0.05839869912786762,0.002691520004471486,-0.055042584594207355,-0.010168953244153327,0.02907608751881987,0.010370233132486369,-0.01702935417966255,-0.010922022515953079,0.012888239469640033,0.014111413375350355,-0.01242410772629795,-0.02311035299814162,0.013738836902986275,0.040600698558063315,-0.009436090766507284,-0.03824280857630372,2.1411196390683373E-4,0.02149175308850683,0.0033093617243690693,-0.01387258987880057,-0.005185628120854145],\n",
       "\"xs\":[1.7611776E12,1.761189941E12,1.761202283E12,1.761214624E12,1.761226966E12,1.761239308E12,1.761251649E12,1.761263991E12,1.761276333E12,1.761288674E12,1.761301016E12,1.761313357E12,1.761325699E12,1.761338041E12,1.761350382E12,1.761362724E12,1.761375066E12,1.761387407E12,1.761399749E12,1.761412091E12,1.761424432E12,1.761436774E12,1.761449115E12,1.761461457E12,1.761473799E12,1.76148614E12,1.761498482E12,1.761510824E12,1.761523165E12,1.761535507E12,1.761547848E12,1.76156019E12,1.761572532E12,1.761584873E12,1.761597215E12,1.761609557E12,1.761621898E12,1.76163424E12,1.761646582E12,1.761658923E12,1.761671265E12,1.761683606E12,1.761695948E12,1.76170829E12,1.761720631E12,1.761732973E12,1.761745315E12,1.761757656E12,1.761769998E12,1.76178234E12]\n",
       "},\n",
       "\"ggsize\":{\n",
       "\"width\":800.0,\n",
       "\"height\":400.0\n",
       "},\n",
       "\"kind\":\"plot\",\n",
       "\"ggtoolbar\":{\n",
       "},\n",
       "\"scales\":[],\n",
       "\"layers\":[{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"size\":1.5,\n",
       "\"linetype\":\"dotted\",\n",
       "\"position\":\"identity\",\n",
       "\"xintercept\":1.761440399E12,\n",
       "\"geom\":\"vline\",\n",
       "\"tooltips\":{\n",
       "\"formats\":[{\n",
       "\"field\":\"^xintercept\",\n",
       "\"format\":\"%b %d, %Y %H:%M:%S\"\n",
       "}],\n",
       "\"title\":\"Berlin \\\"fall back\\\" transition\",\n",
       "\"lines\":[\"^xintercept\",\"3:00 AM → 2:00 AM\"]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "},{\n",
       "\"mapping\":{\n",
       "},\n",
       "\"stat\":\"identity\",\n",
       "\"color\":\"#1380A1\",\n",
       "\"size\":2.0,\n",
       "\"position\":\"identity\",\n",
       "\"geom\":\"line\",\n",
       "\"tooltips\":{\n",
       "\"lines\":[\"@xs\"],\n",
       "\"formats\":[{\n",
       "\"field\":\"^x\",\n",
       "\"format\":\"%b %d, %Y %H:%M\"\n",
       "}]\n",
       "},\n",
       "\"data\":{\n",
       "}\n",
       "}],\n",
       "\"theme\":{\n",
       "\"axis_title\":\"blank\"\n",
       "},\n",
       "\"data_meta\":{\n",
       "\"series_annotations\":[{\n",
       "\"type\":\"datetime\",\n",
       "\"time_zone\":\"Europe/Berlin\",\n",
       "\"column\":\"xs\"\n",
       "},{\n",
       "\"type\":\"float\",\n",
       "\"column\":\"ys\"\n",
       "}]\n",
       "},\n",
       "\"spec_id\":\"9\"\n",
       "};\n",
       "           window.letsPlotCall(function() { fig = LetsPlot.buildPlotFromProcessedSpecs(plotSpec, containerDiv, sizing); });\n",
       "       } else {\n",
       "           fig.updateView({});\n",
       "       }\n",
       "   }\n",
       "   \n",
       "   const renderImmediately = \n",
       "       forceImmediateRender || (\n",
       "           sizing.width_mode === 'FIXED' && \n",
       "           (sizing.height_mode === 'FIXED' || sizing.height_mode === 'SCALED')\n",
       "       );\n",
       "   \n",
       "   if (renderImmediately) {\n",
       "       renderPlot();\n",
       "   }\n",
       "   \n",
       "   if (!renderImmediately || responsive) {\n",
       "       // Set up observer for initial sizing or continuous monitoring\n",
       "       var observer = new ResizeObserver(function(entries) {\n",
       "           for (let entry of entries) {\n",
       "               if (entry.contentBoxSize && \n",
       "                   entry.contentBoxSize[0].inlineSize > 0) {\n",
       "                   if (!responsive && observer) {\n",
       "                       observer.disconnect();\n",
       "                       observer = null;\n",
       "                   }\n",
       "                   renderPlot();\n",
       "                   if (!responsive) {\n",
       "                       break;\n",
       "                   }\n",
       "               }\n",
       "           }\n",
       "       });\n",
       "       \n",
       "       observer.observe(containerDiv);\n",
       "   }\n",
       "   \n",
       "   // ----------\n",
       "   })();\n",
       "   \n",
       "   </script>                <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" display=\"block\" class=\"plt-container\" id=43d0e392-bd8b-40d3-96d3-e196e6a4e01f width=\"100%\" height=\"100%\" style=\"max-width: 800.0px; max-height: 400.0px;\" viewBox=\"0 0 800.0 400.0\" preserveAspectRatio=\"xMinYMin meet\">\n",
       "  <style type=\"text/css\">\n",
       "  .plt-container {\n",
       "   font-family: sans-serif;\n",
       "   user-select: none;\n",
       "   -webkit-user-select: none;\n",
       "   -moz-user-select: none;\n",
       "   -ms-user-select: none;\n",
       "}\n",
       "text {\n",
       "   text-rendering: optimizeLegibility;\n",
       "}\n",
       "#pAaXAE8 .plot-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 16.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .plot-subtitle {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .plot-caption {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .hyperlink-element {\n",
       "fill: #118ed8;\n",
       "font-weight: normal;\n",
       "   font-style: normal;\n",
       "}\n",
       "#pAaXAE8 .legend-title {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .legend-item {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .axis-title-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .axis-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dlNZ7Nu .axis-tooltip-text-x {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .axis-title-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 15.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .axis-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dlNZ7Nu .axis-tooltip-text-y {\n",
       "fill: #ffffff;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .facet-strip-text-x {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#pAaXAE8 .facet-strip-text-y {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dlNZ7Nu .tooltip-text {\n",
       "fill: #474747;\n",
       "font-weight: normal;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dlNZ7Nu .tooltip-title {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "#dlNZ7Nu .tooltip-label {\n",
       "fill: #474747;\n",
       "font-weight: bold;\n",
       "   font-style: normal;font-family: sans-serif;\n",
       "font-size: 13.0px;\n",
       "\n",
       "}\n",
       "\n",
       "  </style>\n",
       "  <g id=\"pAaXAE8\">\n",
       "    <path fill-rule=\"evenodd\" fill=\"rgb(255,255,255)\" fill-opacity=\"1.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\">\n",
       "    </path>\n",
       "    <g transform=\"translate(6.0 6.0 ) \">\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"0.0\" x2=\"0.0\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"68.81679030507803\" y1=\"0.0\" x2=\"68.81679030507803\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"137.63358060270548\" y1=\"0.0\" x2=\"137.63358060270548\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"206.4503709077835\" y1=\"0.0\" x2=\"206.4503709077835\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"275.26716121286154\" y1=\"0.0\" x2=\"275.26716121286154\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"344.083951510489\" y1=\"0.0\" x2=\"344.083951510489\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"412.900741815567\" y1=\"0.0\" x2=\"412.900741815567\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"481.71753211319447\" y1=\"0.0\" x2=\"481.71753211319447\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"550.5343224182725\" y1=\"0.0\" x2=\"550.5343224182725\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"619.3511127233505\" y1=\"0.0\" x2=\"619.3511127233505\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"688.167903020978\" y1=\"0.0\" x2=\"688.167903020978\" y2=\"369.0\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <line x1=\"0.0\" y1=\"345.06623720457424\" x2=\"756.9846933242504\" y2=\"345.06623720457424\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"290.3590701291017\" x2=\"756.9846933242504\" y2=\"290.3590701291017\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"235.65190305362916\" x2=\"756.9846933242504\" y2=\"235.65190305362916\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"180.94473597815661\" x2=\"756.9846933242504\" y2=\"180.94473597815661\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"126.23756890268407\" x2=\"756.9846933242504\" y2=\"126.23756890268407\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"71.53040182721152\" x2=\"756.9846933242504\" y2=\"71.53040182721152\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "            <line x1=\"0.0\" y1=\"16.823234751738966\" x2=\"756.9846933242504\" y2=\"16.823234751738966\" stroke=\"rgb(233,233,233)\" stroke-opacity=\"1.0\" stroke-width=\"1.0\" fill=\"none\">\n",
       "            </line>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "      <g clip-path=\"url(#cJMQ7xo)\" clip-bounds-jfx=\"[rect (31.015306675749617, 0.0), (756.9846933242504, 369.0)]\">\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g>\n",
       "            <g>\n",
       "              <line x1=\"344.0648357346654\" y1=\"369.0\" x2=\"344.0648357346654\" y2=\"-2.8421709430404007E-14\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" fill=\"none\" stroke-width=\"3.3000000000000003\" stroke-dasharray=\"3.3000000000000003,9.9\" stroke-dashoffset=\"0.0\">\n",
       "              </line>\n",
       "            </g>\n",
       "            <g>\n",
       "              <g>\n",
       "                <path d=\"M-4679.541740551591 150.55356623119687 L-4679.541740551591 150.55356623119687 L-4443.633960239589 352.22727272727275 L-4207.707064151764 239.17210210040813 L-3971.799283839762 16.772727272727252 L-3735.872387751937 86.32151274748945 L-3499.945491671562 301.6895337163629 L-3264.0377113595605 253.70406483782756 L-3028.110815271735 133.6218253827321 L-2792.18391918391 139.81966895979724 L-2556.276138871908 199.86101210076313 L-2320.3492427915335 209.94593684942515 L-2084.4414624795318 172.11908421607328 L-1848.5145663917065 153.4536413742865 L-1612.5876703038812 184.27485347849353 L-1376.6798899918795 215.81193360017056 L-1140.7529939115047 184.88536539995243 L-904.8260978236794 128.9268959118055 L-668.9183175116777 163.9868965904438 L-432.99142142385244 228.74202085594015 L-197.06452533602715 199.5204751591759 L38.84325496852398 157.71486299692214 L274.7701510563493 167.27849257151752 L510.677931368351 192.89648022506339 L746.6048274561763 192.79819860097547 L982.5317235440016 173.2299204606608 L1218.4395038485527 167.65601912572023 L1454.366399936378 186.86412707947187 L1690.2932960242033 200.36543044952165 L1926.201076336205 176.8578323441929 L2162.1279724240303 148.99646207637156 L2398.0357527285814 179.47228163244063 L2633.9626488164067 211.05697469476794 L2869.889544904232 186.50788221926226 L3105.7973252162337 165.03803220022522 L3341.724221304059 175.2714752122513 L3577.6511173844337 190.26101322109858 L3813.5588976964355 186.9198650839798 L4049.4857937842607 173.89394527841364 L4285.412689872086 173.2247814861931 L4521.320470184088 187.74161334961912 L4757.2473662644625 193.58775540458143 L4993.155146576464 173.42860751941325 L5229.0820426642895 158.73324398418794 L5465.008938752115 186.10695391918298 L5700.9167190641165 201.86629316034822 L5936.843615144491 180.82760138833353 L6172.7705112323165 169.18720670857914 L6408.678291544318 179.1342779304743 L6644.6051876321435 188.53403690084713 L6880.532083719969 183.78164621814497 \" fill=\"none\" stroke-width=\"4.4\" stroke=\"rgb(19,128,161)\" stroke-opacity=\"1.0\">\n",
       "                </path>\n",
       "              </g>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "        <defs>\n",
       "          <clipPath id=\"cn7rj81\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "        <defs>\n",
       "          <clipPath id=\"cJMQ7xo\">\n",
       "            <rect x=\"31.015306675749617\" y=\"0.0\" width=\"756.9846933242504\" height=\"369.0\">\n",
       "            </rect>\n",
       "          </clipPath>\n",
       "        </defs>\n",
       "      </g>\n",
       "      <g>\n",
       "        <g transform=\"translate(31.015306675749617 369.0 ) \">\n",
       "          <g transform=\"translate(0.0 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>22:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(68.81679030507803 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>23:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(137.63358060270548 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>00:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(206.4503709077835 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>01:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(275.26716121286154 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>02:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(344.083951510489 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>02:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(412.900741815567 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>03:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(481.71753211319447 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>04:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(550.5343224182725 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>05:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(619.3511127233505 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>06:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(688.167903020978 0.0 ) \">\n",
       "            <line stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" x2=\"0.0\" y2=\"4.0\">\n",
       "            </line>\n",
       "            <g transform=\"translate(0.0 6.0 ) \">\n",
       "              <text class=\"axis-text-x\" text-anchor=\"middle\" dy=\"0.7em\" y=\"0.0\">\n",
       "                <tspan>07:00</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <line x1=\"0.0\" y1=\"0.0\" x2=\"756.9846933242504\" y2=\"0.0\" stroke-width=\"1.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\">\n",
       "          </line>\n",
       "        </g>\n",
       "        <g transform=\"translate(31.015306675749617 0.0 ) \">\n",
       "          <g transform=\"translate(0.0 345.06623720457424 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 290.3590701291017 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 235.65190305362916 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>-0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 180.94473597815661 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 126.23756890268407 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.1</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 71.53040182721152 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.2</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "          <g transform=\"translate(0.0 16.823234751738966 ) \">\n",
       "            <g transform=\"translate(-2.0 0.0 ) \">\n",
       "              <text class=\"axis-text-y\" text-anchor=\"end\" dy=\"0.35em\" y=\"0.0\">\n",
       "                <tspan>0.3</tspan>\n",
       "              </text>\n",
       "            </g>\n",
       "          </g>\n",
       "        </g>\n",
       "      </g>\n",
       "    </g>\n",
       "    <path fill=\"rgb(0,0,0)\" fill-opacity=\"0.0\" stroke=\"rgb(71,71,71)\" stroke-opacity=\"1.0\" stroke-width=\"0.0\" d=\"M0.0 0.0 L0.0 400.0 L800.0 400.0 L800.0 0.0 Z\" pointer-events=\"none\">\n",
       "    </path>\n",
       "  </g>\n",
       "  <g id=\"dlNZ7Nu\">\n",
       "  </g>\n",
       "</svg>\n",
       "                <script>document.getElementById(\"43d0e392-bd8b-40d3-96d3-e196e6a4e01f\").style.display = \"none\";</script>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "// Berlin DST transition back: October 26, 2025 at 3:00 AM → 2:00 AM\n",
    "\n",
    "// Generate equally spaced UNIX timestamps (in seconds)\n",
    "val startTimestamp = ZonedDateTime.of(2025, 10, 23, 0, 0, 0, 0, ZoneId.of(\"UTC\")).toEpochSecond()\n",
    "val endTimestamp = ZonedDateTime.of(2025, 10, 29, 23, 59, 0, 0, ZoneId.of(\"UTC\")).toEpochSecond()\n",
    "val unixTimestamps = (0 until N).map { i -> \n",
    "    startTimestamp + (endTimestamp - startTimestamp) * i / (N - 1) \n",
    "}\n",
    "\n",
    "// Convert to ZonedDateTime with Berlin timezone\n",
    "val xsDatetime = unixTimestamps.map { timestamp ->\n",
    "    Instant.ofEpochSecond(timestamp).atZone(ZoneId.of(\"Europe/Berlin\"))\n",
    "}\n",
    "\n",
    "val data = mapOf(\n",
    "    \"xs\" to xsDatetime,\n",
    "    \"ys\" to ys\n",
    ")\n",
    "\n",
    "val p = letsPlot(data = data) { x = \"xs\"; y = \"ys\" } +\n",
    "    geomVLine(\n",
    "        xintercept = Instant.ofEpochSecond(\n",
    "            ZonedDateTime.of(2025, 10, 26, 0, 59, 59, 0, ZoneId.of(\"UTC\")).toEpochSecond()\n",
    "        ).atZone(ZoneId.of(\"Europe/Berlin\")),\n",
    "        tooltips = layerTooltips()\n",
    "            .title(\"Berlin \\\"fall back\\\" transition\")\n",
    "            .line(\"^xintercept\").format(\"^xintercept\", \"%b %d, %Y %H:%M:%S\")\n",
    "            .line(\"3:00 AM → 2:00 AM\"),\n",
    "        linetype = \"dotted\", \n",
    "        size = 1.5\n",
    "    ) +\n",
    "    geomLine(\n",
    "        tooltips = layerTooltips()\n",
    "            .line(\"@xs\")\n",
    "            .format(\"^x\", \"%b %d, %Y %H:%M\"),\n",
    "        color = \"#1380A1\", \n",
    "        size = 2\n",
    "    ) +\n",
    "    ggtb() + \n",
    "    ggsize(800, 400) + \n",
    "    theme(axisTitle = \"blank\")\n",
    "\n",
    "p + coordCartesian(\n",
    "    xlim = Pair(\n",
    "        ZonedDateTime.of(2025, 10, 25, 22, 0, 0, 0, ZoneId.of(\"Europe/Berlin\")),\n",
    "        ZonedDateTime.of(2025, 10, 26, 8, 0, 0, 0, ZoneId.of(\"Europe/Berlin\"))\n",
    "    )\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Kotlin",
   "language": "kotlin",
   "name": "kotlin"
  },
  "language_info": {
   "codemirror_mode": "text/x-kotlin",
   "file_extension": ".kt",
   "mimetype": "text/x-kotlin",
   "name": "kotlin",
   "nbconvert_exporter": "",
   "pygments_lexer": "kotlin",
   "version": "1.9.23"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
